Skip to content

fix(agc): retain raw draw decodes across snapshot eviction - #10103

Merged
oneandonlydean merged 15 commits into
boykopovar:mainfrom
Amoenus:codex/fix-raw-snapshot-reuse-mainfef1-20261023
Nov 3, 2026
Merged

oneandonlydean merged 15 commits into
boykopovar:mainfrom
Amoenus:codex/fix-raw-snapshot-reuse-mainfef1-20261023

Conversation

@Amoenus

@Amoenus Amoenus commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

What

Preserve a held raw draw decode when the global raw-shader snapshot cache evicts its immutable program snapshots.

DecodeProgramsCurrent compares snapshot identity. A draw can retain a snapshot after the bounded global cache evicts it. #10174 is now merged, raising capacity to4,096 entries/64MiB; the4,097-snapshot regression still forces eviction. Rereading identical bytes after eviction creates a different snapshot and unnecessarily invalidates that decode. Supply its held main and tail snapshots to ReadRawShader; an eligible retained snapshot uses the existing queued-write drain, GPU-write flush and exact byte comparison. Modified or unreadable code does not become a cache hit. The global cache limits and unsupported-path refusals are unchanged.

The regression churns 4,097 other snapshots and requires eviction, checks retained decode validity after eviction, rejects changed main and tail words, and checks validity after restoring the original words. The queued-write regression checks that an overlapping outstanding write invalidates a retained decode. This changes snapshot reuse, not shader instruction semantics or rendered output.

Related #9899 addresses callee-link memoization and range-check relocation. It does not supply this correction. The overlap tool reports no conflicting lines at the recorded base; manual review covers the shared files of conflicting PRs. A source-only merge with #9899 is clean; that combined tree has not been built or tested. On26October the author confirmed that #9899 and this correction are independent and either can land first. No combined runtime qualification is claimed.

Queued-read overlap order: accepted the author's offered #10103 -> #11442 order. #11442 carries the downstream rebase: preserve this PR's retained-snapshot signature/selection and both pre-read drains when extracting its shared helper, then retain its additional callee/table drains. This is a merge-order agreement, not a functional prerequisite of #10103; Depends on: none remains. No combined build/GPU qualification is claimed. #9899 remains independently agreed/either order.

Tested

2 November evening refresh: 76d2864 includes main 8fa9727, with published ancestry preserved. Exact paired source pins, commands, logs, artifact hashes, advisory analysis and limits.

Full configured native-library/relinker/actual-fixture build; 2 focused physical-GPU and 1 CPU passes. Conventions/whitespace pass. Common main checks and new capability tests are distinguished in the report. Earlier controls keep their original pins. No full-suite, new Linux/title/FPS or future combined-dependency claim.

Same-machine RTX 5080/NVIDIA 621.01 and Radeon Graphics/AMD 26.10.1, Windows 11 Enterprise 26200; actual devices and loaded Khronos 1.4.363 verified. Required Vulkan, cache off, verbose serial 30-second CTest. No selected validation warning/error/VUID or timeout. Device-limit skips, if any, are explicit in the report.

Independent RX 9070 XT Windows evidence: c9f7fe4/main4569 retained-decode test fails 5/5 restoring production sources and passes 5/5 with the fix; queued raw shader is CPU-only. Those source pins remain distinct from this refresh.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: Fixes perf: raw draw decode reuse is lost after snapshot eviction (PPSA99902) #9998
  • Unblocks: none
  • GPUs tested: NVIDIA GeForce RTX5080 (10de:2c02), driver621.01/32.0.16.2101; AMD Radeon(TM) Graphics (1002:13c0), driver32.0.21045.16010; both Windows11 Enterprise26200.
  • AI-assisted: yes (Codex); author responsible

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 5609 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Draw/DrawCache.cpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 7410 core/libs/prx/libSceAgcDriver/tests/execution/PreparedUnregisteredGraphics.cpp
PR 7642 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 7682 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 8592 core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 9508 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 10193 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 13486 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 13928 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp
PR 13929 core/libs/prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp
core/libs/prx/libSceAgcDriver/Execution/src/Driver/Shaders/ShaderRegistry.cpp

@github-actions github-actions Bot added agc libSceAgc* fix error Closes an issue (Fixes #N) labels Oct 23, 2026

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed the complete diff, the linked eviction report and the published qualification logs. The retained pointer path still goes through the same queue drain, GPU-write flush and exact mapped-byte comparison; the test covers eviction, changed main/tail code, restoration and an overlapping queued write. The report shows the intended test-only control failing on both GPU vendors and matched main/change runs with zero validation messages. The conventions check and git diff --check pass on this head, and the current pairwise merge is clean.

Please refresh this branch from current main and rerun the focused qualification before approval. This head is 59 commits behind and current main has since changed ShaderRegistry.cpp, DrawCache.cpp, GuestMemory and the two test files touched here. In particular, current main has removed the PreparedUnregisteredGraphics test code this PR modifies, and its shader snapshot and write-tracking paths now sit alongside substantial draw-pipeline and memory changes. The published GPU qualification is pinned to main fef15751e6 (with a source review of 1f1acb195e); it does not exercise the current 513ca7e558 integration. The pairwise merge is clean, but that alone does not validate these changed paths against the present implementation. After refreshing, please retain the eviction and invalidation checks in a test that runs on the current test path, then rerun the same focused main/head groups with the required validation layer on both GPUs and compare the logs. Also recheck the shared-file overlap with #9899 after the refresh; its feature is distinct, and I found no conflict in the current two-head merge.

@Amoenus

Amoenus commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

@MarcZX10 Refreshed and requalified at 31dc58ebb28372c5abc4b8ad900b7dc8003aafbc, incorporating main e3d03fbae64e1b49e5d4e84e753ccce6edf60da5. Published history and exact own added/removed lines are preserved.

The same focused main/change groups now pass on both RTX5080 and Radeon with the required loaded validation layer.47 positive processes (36 actualGPU,11 CPU/mock), plus2 intended failing controls from unchanged main production + identical regression tests. Zero validation warnings/errors/VUIDs, skips or timeouts; maximum2.329s. Native library aggregate/relinker and real selected fixtures build. Complete new logs, pins, source-blob comparison and advisory analysis.

I checked the removed-test concern directly: the five PR-touched files are blob-identical between mainfef15751e6 and maine3d03fbae6 (also at the review's513ca7e558 pin). Current main retains PreparedUnregisteredGraphics.cpp and its registration; the PR's CheckRetainedDecode() remains called from Check() and executes in all six candidate GPU processes. The eviction, main/tail rewrite, restoration and queued-write assertions are retained. Nearby GuestMemory/draw/locking changes warranted this fresh qualification.

Rechecked #9899 at9b4e692d70: the new source-only combined merge is clean, with no duplicate retained-snapshot implementation, combined build/test or agreed landing order claimed. Depends on: none remains. The PR description and existing #9998/#9899 reports are updated in place. Ready for another review when convenient.

AI-assisted implementation, validation and reporting: yes (Codex); author responsible.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewing exact head 31dc58ebb28372c5abc4b8ad900b7dc8003aafbc: the refreshed qualification resolves my previous blocker. I inspected the linked raw summary and manifest: literal main e3d03fbae64e1b49e5d4e84e753ccce6edf60da5 and this head each pass the same 18 GPU and 4 CPU/mock focused processes; the test-only control (unchanged main production plus the new tests) fails the intended eviction assertion on both RTX 5080 and Radeon, while queued-write checks pass. Required Vulkan validation was loaded and logs report no warnings, errors, VUIDs, skips or timeouts. The new test path explicitly executes the retained-decode check and covers eviction, changed main/tail code, restoration and queued writes.\n\nI fetched current main (af4700b98d981911af0c1809415db85c13127836). Since the qualification base, its commits change core/libs/CMakeLists.cpp, libSceAgc command tests and GNM Neo files; none of the five PR-touched implementation/test files changed. Current merge preview is clean; exact-head conventions and diff checks pass. Hosted conventions/labels/report pass; product jobs are skipped by policy. The PR does not claim a combined build with #9899, a full default suite, Linux/lavapipe, console equivalence, performance improvement or title unblock. No blocking issue remains.

@MarcZX10

Copy link
Copy Markdown
Contributor

Correction to the review text above: the unrelated project file is core/libs/CMakeLists.txt (not core/libs/CMakeLists.cpp). The scope statement is unchanged: the intervening current-main commits did not modify the PR’s five implementation/test files.

@MarcZX10

Copy link
Copy Markdown
Contributor

Potential test interaction with open #10174: that PR raises the raw snapshot limit to 4096 entries / 64 MiB. This PR’s 80-snapshot churn will then pass without evicting the held snapshot, so it will stop exercising the retained-decode-after-eviction behavior even though #10174 adds its own separate cache-eviction test. Could this regression churn enough distinct snapshots to force an eviction at the raised limit (or otherwise assert eviction occurred) when combining the changes? #10174 documents the same interaction.

@Amoenus

Amoenus commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

Fresh main refresh at 5abbe50bc3e3, frozen main 2960e9a6e7e1fc99c4ed180c71495b5eb83464c7; normal merge preserves published history and the identical five-file topic. 30 positive processes (24 physical-GPU/six CPU), main8/8 and candidate22/22, including three forced-eviction regression passes per vendor and queued-write invalidation. Zero validation diagnostics, skips or timeouts; longest CTest 1.060s. Full native/relinker/real-fixture builds, stable inventories and conventions pass.

Complete source pins, verbose logs and advisory analysis. Earlier main319 negative controls retain their original pins. No new title/performance/Linux/macOS or combined #9899 claim. A normal tested-main update retriggers automatic CI without changing its identity guard; the new hosted result remains pending. AI-assisted:yes(Codex).

The fetchable refs/pull/10103/head now matches 5abbe50bc3e3e665861d050116d9b7032060a3b2 (also verified by git ls-remote), clearing the earlier source-ref mismatch. The new automatic Windows job is separate hosted evidence and was queued at this readback; local qualification above is complete. No identity-check bypass, workflow edit or manual full-build dispatch was used.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review of exact head 86a3a835eaf3293d0c05d7a30bc4d7fcaa1674d5: the revision addresses my eviction-coverage concern. The test now churns 4,097 distinct snapshots and explicitly requires a different snapshot identity before checking retained-decode validity, so it cannot pass without exercising eviction at the 4,096-entry capacity used by #10174. I reviewed the test and production diff: retained main/tail snapshots still pass through the existing ReadRawShader validation path, while the queued-write test checks invalidation with an outstanding overlapping write; changed main/tail contents and restoration are covered. The updated report separates standalone and #10174-composed pins and describes intended test-only control failures on both RTX 5080 and Radeon, with no Vulkan diagnostics/skips/timeouts. Current hosted conventions, labels, eligibility and report checks pass; product CI jobs are skipped by repository policy, so I rely on the author’s published Windows qualification rather than claiming hosted product CI ran. The PR identifies #9899 as independent and accurately says no landing order or combined qualification was agreed. I found no remaining blocking issue in this diff.

@oneandonlydean oneandonlydean self-assigned this Oct 23, 2026
@Sam-mon7

Copy link
Copy Markdown
Contributor

Overlap with #11442 in ShaderRegistry.cpp (the overlap comment lists both).

#11442 is small:

  • It moves ReadRawShader's local drain lambda into a file-local DrainShaderWrites(address, bytes).
  • It calls that function before the guest reads in ReadUserDataCallee and ReadGuestBytes, so queued queue-0 writes land before shader callees and call tables are read.

Its review only asks for a sync with current main, so I'd propose #11442 lands first. This PR would then re-apply those two calls when it merges main. If you'd rather go first, I'll rebase #11442 onto this PR instead.

Once we agree, I'll record the order with Depends on on #11442.

@Amoenus

Amoenus commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

@Sam-mon7 Thanks; I will take your offered reverse order: #10103 -> #11442. This keeps the independently validated retained-decode correction moving while you carry the small helper/callee-read rebase afterward. Your drain helper and queued-callee tests remain your contribution.

I checked the exact submitted heads 5abbe50bc3e3 and 39c8af55c0f4: the combined source merge really conflicts at ReadRawShader. When rebasing second, retain #10103's (address, retained) signature and eligible retained-snapshot selection, replace the local drain lambda with your DrainShaderWrites, and keep it ahead of both cached/retained comparisons and uncached page reads. Keep your additional callee/table drains. #10103 has no functional dependency on those additional calls; I am recording the order in its description, with Depends on: none retained. Please record #10103 as your merge-order prerequisite. The separate #9899/either-order agreement is unchanged; this does not settle your #10140 coordination.

One current-main observation for the reachability wording: LinkUserDataCallees on bb04a4f1ea01 also admits GCN vertex stages, so the earlier compute-only caller argument needs refreshing for that path. I have not demonstrated a reachable ordering failure there.

This is source/landing-order review, not execution of the combined tree. AI-assisted: yes (Codex).

@TechLevelZero

TechLevelZero commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 5abbe50 merged onto main 0836dfd · tested 2026-11-01 02:22 UTC · 22 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,395 passed · 5 failed (0 new, 4 also fail on main, 1 unstable on main) · 44 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,444 of 3,087 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (924 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 60.7 s, ⚠️ agc_driver_graphics_maps_fallback 31.7 s, ⚠️ agc_driver_graphics 31.2 s, ⚠️ agc_driver_lazy_resolved_abi 30.5 s
Unstable on main (1, these also failed in recent main runs on this machine; not counted against this PR)
agc_submit_progress: failed in 7 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_idle_store_yields
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_job_manager_compute_capacity: Failed in the parallel run; also passed only on retry in 209 other runs in the last 7 days
Validation IDs already present on main (5 IDs in 476 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (476 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 468 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (44)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fresh: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_f
Reproduce
git fetch origin 5abbe50bc3e3e665861d050116d9b7032060a3b2 0836dfdf4fecb1e0326100c490476e15d3a74da5
git checkout 0836dfdf4fecb1e0326100c490476e15d3a74da5 && git merge --no-ff 5abbe50bc3e3e665861d050116d9b7032060a3b2
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@Amoenus

Amoenus commented Oct 29, 2026

Copy link
Copy Markdown
Contributor Author

@TechLevelZero, thank you for the NVIDIA/Linux run. I checked the complete supplied logs. Neither agc_driver_prepared_unregistered_graphics nor agc_driver_queued_raw_shader is listed in the CPU or GPU results. These contain this PR's eviction and queued-write regression checks; could you include them explicitly? QueuedRawShader is CPU-only.

I rebuilt your exact main ba5b5330b3 + submitted 5abbe50bc3e3 composition. The focused comparison has 32 passes (24 verified GPU, eight CPU), plus the intended eviction-control failure on both RTX 5080 and Radeon Graphics. Full evidence and pins.

Your lazy-ABI test passes in 36.72 seconds, above the 30-second target. Our serial Windows main/change runs take 3.46–4.34 seconds, which does not resolve Linux timing. Could you provide a serial Linux main/change pair for agc_driver_lazy_resolved_abi_switch_set, retaining the 30-second bound? No broad rerun is needed. The fixture manages its own private cache; I have not attributed the difference to caching/contention or increased the timeout. Source unchanged. AI-assisted: yes (Codex).

@RNK123

RNK123 commented Nov 1, 2026

Copy link
Copy Markdown

Linux / AMD RDNA 4 (RADV) focused validation and serial timing run for head 5abbe50bc3 merged cleanly onto main 0a148be963, covering the two regression tests (agc_driver_prepared_unregistered_graphics, agc_driver_queued_raw_shader) and the bounded serial Linux agc_driver_lazy_resolved_abi timing pair noted in the PR description.

Host & GPU: CachyOS Linux (7.3.1-1-cachyos), 12th Gen Intel Core i5-12400F, GCC 16.2.1 (Release, -DBUILD_TESTING=ON), AMD Radeon RX 9060 XT (1002:7590, RADV GFX1200, Mesa 26.2.5-1, Vulkan 1.4.354, subgroup 64), Khronos validation layer 1.4.363.

Environment: ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, run serially (ctest --repeat until-fail:3 -V). VK_LOADER_DEBUG=layer confirmed Insert instance layer "VK_LAYER_KHRONOS_validation" and Inserted device layer "VK_LAYER_KHRONOS_validation", and neither log contains was not found but was requested by env var VK_INSTANCE_LAYERS.

Test main (0a148be963) 3 serial runs main + #10103 (5abbe50bc3) 3 serial runs
agc_driver_prepared_unregistered_graphics (4,097-snapshot eviction + restoration) Pass 3/3 (0.09 s, 0.09 s, 0.08 s) Pass 3/3 (0.14 s, 0.14 s, 0.13 s)
agc_driver_queued_raw_shader (queued-write invalidation, CPU) Pass 3/3 (0.41 s, 0.40 s, 0.40 s) Pass 3/3 (0.41 s, 0.40 s, 0.41 s)
agc_driver_lazy_resolved_abi Pass 3/3 (0.49 s, 0.43 s, 0.44 s) Pass 3/3 (0.45 s, 0.43 s, 0.44 s)
agc_driver_lazy_resolved_abi_switch_set Pass 3/3 (0.41 s, 0.35 s, 0.37 s) Pass 3/3 (0.48 s, 0.44 s, 0.46 s)
agc_driver_draw_cache_relocation + 4 variants Pass 15/15 (0.11–0.16 s each) Pass 15/15 (0.13–0.17 s each)
agc_driver_draw_cache_reuse + 6 variants Pass 21/21 (0.11–0.22 s each) Pass 21/21 (0.13–0.17 s each)
agc_driver_vertex_point_size Pass 3/3 (0.13 s, 0.09 s, 0.08 s) Pass 3/3 (0.10 s, 0.10 s, 0.10 s)
agc_locks Pass 3/3 (0.31 s, 0.31 s, 0.26 s) Pass 3/3 (0.35 s, 0.36 s, 0.35 s)
  • Result: 18/18 focused CTest entries pass 3/3 on both main (9.98 s total across 54 runs) and the merged candidate (11.05 s total across 54 runs), with every agc_driver_lazy_resolved_abi* run under 0.50 s.
  • Vulkan validation: 0 VUID- or SYNC-HAZARD- diagnostics on main and 0 on the merged candidate (0 new).

AI-assisted hardware test run (Antigravity).

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ AMD GPU test: passed

PR head 03bc52c merged onto main f2d874c · tested 2026-11-01 20:57 UTC · 16 min

GPU AMD Radeon RX 6300 (RADV NAVI24), driver Mesa 25.2.8-0ubuntu0.24.04.4, Vulkan 1.4.318
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-42-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,429 passed · 13 failed (0 new, 9 also fail on main, 4 unstable on main) · 55 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,497 of 3,168 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (936 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.6 s, ⚠️ agc_driver_graphics 106.8 s, ⚠️ agc_driver_graphics_maps_fallback 103.5 s, ⚠️ public_headers 54.4 s, ⚠️ unwrap_self 44.9 s
Unstable on main (4, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_job_manager_compute_capacity: failed in 4 of the last 5 main runs
agc_driver_pipeline_journal: failed in 3 of the last 5 main runs
agc_submit_progress: failed in 4 of the last 5 main runs
agc_submit_progress_no_timeline: failed in 4 of the last 5 main runs
Failing on main too (9, not counted against this PR)
agc_driver_guest_memory_lifetime_direct
agc_driver_image_table
agc_driver_native_depth_bda_clear
agc_driver_native_depth_buffer_clear
agc_driver_native_depth_clears
agc_driver_native_multisample_depth
agc_idle_publish_wait
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (5 IDs in 484 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (484 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 476 more
VUID-vkCmdCopyImage-srcImage-01548 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (6 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (55)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_copied_writer_label_order: skipped, the device reports a minStorageBufferOffsetAlignment of 4, so the dispatch binds its record at +0x1004 in place and nothing is written back; the test needs an alignment above 4
agc_driver_image_table_vouched_lookups: skipped, the device reports 4 of 4 host-imported pages written after a GPU read, so a watched imported table cannot be vouched for
agc_driver_linear_target_direct_write_completion: skipped, the device does not keep host imports write-watched, so no completion stamp over the target is tracked
agc_driver_ngg_vertex_wave_reduction: skipped, s3 describes a 32-lane wave only on 32-lane subgroups, and the device has 64 lanes
agc_driver_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_driver_unit_shadow_budget: skipped, the device does not import watched host memory for unit shadows
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_pipeline_binary_vulkan: skipped, the device lacks VK_KHR_pipeline_binary
agc_shadowed_key_stores: skipped, the device imports no watched host memory under a unit shadow
agc_small_tiled_shadow_label: skipped, host imports are unavailable: the test block is not imported and watched
agc_storage_clear_hand_over: skipped, the device imports no watched host memory for the clear-key hand-over
agc_unit_shadow: skipped, the device does not import watched host memory for unit shadows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not 
Reproduce
git fetch origin 03bc52cfcc4bd18d0eb4d299109ba6303964114d f2d874c1fdccf781c0fa5d86619bb5dd8894b958
git checkout f2d874c1fdccf781c0fa5d86619bb5dd8894b958 && git merge --no-ff 03bc52cfcc4bd18d0eb4d299109ba6303964114d
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 12 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 16 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's AMD machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head c9f7fe4 merged onto main 2517aa0 · tested 2026-11-02 09:21 UTC · 25 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,445 passed · 5 failed (0 new, 3 also fail on main, 2 unstable on main) · 45 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,495 of 3,174 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (929 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 118.0 s, ⚠️ agc_driver_graphics_maps_fallback 30.0 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_submit_progress: failed in 8 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 8 of the last 10 main runs
Failing on main too (3, not counted against this PR)
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Validation IDs already present on main (5 IDs in 483 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (483 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 475 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (45)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fps_limit: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_o
Reproduce
git fetch origin c9f7fe48d4a7fa7616e5f14ebbcb1814d9d3388d 2517aa02f78e00b8b06ae5ff4206a8c04e22a1cb
git checkout 2517aa02f78e00b8b06ae5ff4206a8c04e22a1cb && git merge --no-ff c9f7fe48d4a7fa7616e5f14ebbcb1814d9d3388d
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@bunbeans2-arch

Copy link
Copy Markdown
Contributor

Shows the fix on RDNA 4 with AMD's Windows driver: agc_driver_prepared_unregistered_graphics fails 5 of 5 without this PR's source changes and passes 5 of 5 with them, on an RX 9070 XT ✅

Windows 11 Pro 10.0.22631, AMD Radeon RX 9070 XT (driver 32.0.32015.7029), MSYS2 UCRT64 g++ 16.1.0, Release, c9f7fe48d4 merged onto main 4569fe654a. ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation.

  • With the PR: agc_driver_prepared_unregistered_graphics and agc_driver_queued_raw_shader passed 5 of 5, with no VUID- line.
  • With the PR's tests but its 3 source files (ShaderRegistry.hpp, ShaderRegistry.cpp, DrawCache.cpp) put back to main: agc_driver_prepared_unregistered_graphics failed 5 of 5 with an unchanged retained raw draw decode was invalidated by snapshot cache eviction. agc_driver_queued_raw_shader still passed 5 of 5.
  • main with its own, shorter version of the test: passed 3 of 3.
  • The loader logs Insert instance layer "VK_LAYER_KHRONOS_validation" in every run of agc_driver_prepared_unregistered_graphics. agc_driver_queued_raw_shader never opens a Vulkan device here, so it runs on the CPU only.

The earlier Radeon runs here were at older heads or on RADV under Linux. This one is AMD's own Windows driver at the current head c9f7fe48d4.

AI-assisted: yes (Claude Code)

@TechLevelZero

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 76d2864 merged onto main 9090972 · tested 2026-11-03 02:09 UTC · 22 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,638 passed · 5 failed (0 new, 2 also fail on main, 3 unstable on main) · 44 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,687 of 3,607 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (974 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 120.3 s, ⚠️ agc_driver_graphics_maps_fallback 34.3 s, ⚠️ agc_driver_lazy_resolved_abi 30.8 s
Unstable on main (3, these also failed in recent main runs on this machine; not counted against this PR)
agc_driver_pipeline_journal: failed in 3 of the last 10 main runs
agc_submit_progress: failed in 7 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 6 of the last 10 main runs
Failing on main too (2, not counted against this PR)
agc_driver_image_table
guest_socket_options_multicast
Validation IDs already present on main (4 IDs in 517 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (517 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 509 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
Skipped (44)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fps_limit: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fresh: skipped, no display or Vulkan device: 
Reproduce
git fetch origin 76d2864850b0a2e098c64e8a8ce3da04ef2c261a 9090972b7e91fd266819cbd77a8b058e177b5682
git checkout 9090972b7e91fd266819cbd77a8b058e177b5682 && git merge --no-ff 76d2864850b0a2e098c64e8a8ce3da04ef2c261a
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@oneandonlydean
oneandonlydean merged commit a872b03 into boykopovar:main Nov 3, 2026
13 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* fix error Closes an issue (Fixes #N)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf: raw draw decode reuse is lost after snapshot eviction (PPSA99902)

7 participants